
/**
 * @author tmh
 * @date 2024/10/14 21:33
 * @description
 */
public class T43字符串相乘 {
    public String multiply(String num1, String num2) {
        //特殊情况判断
        if (num1.equals("0")||num2.equals("0")){
            return "0";
        }
        //利用竖式的思想，最多为num1的长度加上num2长度之和
        int m = num1.length();
        int n = num2.length();
        //存放结果
        int[] result = new int[m + n];
        //模拟竖式
        for (int i = m - 1; i >= 0; i--) {
            for (int j = n - 1; j >= 0; j--) {
                int multi = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
                int p1 = i + j;
                int p2 = i + j + 1;
                int sum = multi + result[p2];
                //脑部竖式的过程，先计算p2这个位置的值
                result[p2] = sum % 10;
                //用个位数加上原来处于p1这个位置的数
                result[p1] = sum / 10 + result[p1];
            }
        }
        StringBuilder builder = new StringBuilder();
        int i = 0;
        //使用while循环让i处于结果的第一个有效位
        while (i < result.length && result[i] == 0) {
            i++;
        }
        //把剩下的数组里面的结果构建成字符串
        for (; i < result.length; i++) {
            builder.append(result[i]);
        }
        return builder.toString();
    }
}
